package com.baidu.mpks.backendweb.ktree.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.baidu.mpks.backendweb.ktree.domain.TreeNode;
import com.baidu.mpks.backendweb.ktree.dto.TreeNodeDto;
import com.baidu.mpks.datasource.dto.SourceDto;

public interface TreeService {

    List<TreeNode> getTreeNodes();

    void delete(int nodeId);

    /**
     * 获取节点信息
     *
     * @return
     */
    Map<Integer, String> getNodesMap();

    /**
     * @param nodeId
     *
     * @return
     */
    Set<Integer> getChildrensNotIncludeSelf(Integer nodeId);

    /**
     * @param nodeId
     *
     * @return
     */
    Set<Integer> getChildrensIncludeSelf(Integer nodeId);

    /**
     * @param treeNode
     *
     * @return
     */
    TreeNode addTreeNode(TreeNode treeNode);

    /**
     * @param treeNode
     */
    void updateTree(TreeNode treeNode);

    /**
     * @param nodeId
     * @param roleIds
     */
    // void addTreePermission(Integer nodeId, Set<Integer> roleIds);

    /**
     * @param nodeId
     */
    // void deleteTreePermission(Integer nodeId, Set<Integer> roleIds);

    /**
     * @param nodeId
     * @param roleIds
     */
    // void updateTreePermission(Integer nodeId, Set<Integer> roleIds);

    /**
     * @param roleId
     * @return
     */
    List<TreeNode> getNodesByRoleId(Integer roleId);

    /**
     * 
     * @param nodeId
     * @return
     */
    TreeNodeDto getNodeInfoById(Integer nodeId);

    /**
     * 只删除角色权限
     */
    // void deleteTreeRolePermission(Integer nodeId, Set<Integer> roleIds);

    /**
     * @param nodeId
     * @param contentType
     *
     * @return
     */
    Map<String, Object> getTotalByNodeIdAndContentType(Integer nodeId, String contentType);

    /**
     * 获取该节点以及改节点的子节点的所有资源列表
     *
     * @param nodeId
     *
     * @return
     */
    List<SourceDto> getSourceListByNodeId(Integer nodeId);

    /**
     * 获取父节点信息
     * @param tree
     * @return
     */
    Set<String> getParentsById(Integer nodeId);

    /**
     * 获取节点下的有权限的nodeId
     *
     * @param nodeId
     * @return
     */
    Set<Integer> getChildPermittedNode(Integer nodeId);
    
    /**
     * 根据nodeId获取所有父类的信息
     *
     * @param nodeId
     *
     * @return
     */
    List<TreeNode> getAllParent(Integer nodeId);

}
